← 返回项目

数据处理

BGE 误拦截数据处理

803 BGE 误拦数据项目:完整处理过程说明

1. 项目要解决的问题与原始数据

原始数据

两个主要文件:

  • 00原始数据/bad_case_false_block_20260801.xlsx(658 行)
  • 00原始数据/bad_case_false_block_20260801_bge_combined_attribution_threshold_0_99999.json(333 条归因记录)

Excel 数据的特点:

  • 每条包含配置、记录 ID、日期、完整文本、文本长度。
  • 很多行内容重复——同一条文本在 Q3G 开/关配置下各出现一次。
  • 文本通常很长,内部是多段推理、分析、复现、风险判断、修复建议等逐步累积的内容,全文之间存在大量重叠。

要解决的问题

项目目标不是简单保留这些长文本,而是定位:

一条合规长文本中,究竟是哪一小段内容最可能触发 BGE 的错误拦截。

定位出这些片段后,再把它们整理成可用于评测、规则分析和后续模型优化的数据。


2. BGE 归因:从长文本中定位触发片段

整体流程

读取 Excel → SHA1 去重 → 切分片段 → BGE 打分 → 计算归因分数 → 筛选候选 → 每条最多保留 top 10

数量变化:

658 条 Excel 原始行
  → 334 条唯一完整文本(去重)
  → 333 条有候选触发片段的归因结果(1 条因无候选片段被排除)

BGE 阈值:0.99999,耗时约 836 秒。

六种归因分数

对每个片段 Pi,系统计算了以下分数:

分数 含义
single_score 片段单独送入 BGE 的 unsafe 分数,说明这段话本身像不像风险内容
prefix_score 从开头累计到当前片段后的分数
incremental_delta 加入当前片段后分数上涨了多少,观察是否加到这一段后分数突然升高
global_trigger_score 从完整文本中移除当前片段后整体分数下降多少,下降越多说明贡献越大
window_trigger_score 在当前片段附近的局部窗口里做消融,适合长文本(BGE max_length = 128 下全文经常被截断)
combined_trigger_score 整合以上所有证据的综合排序分数,top_triggers 主要按此排序

片段的保留条件

满足以下条件的段落进入候选集:

  • single_score 是否高
  • incremental_delta 是否为正
  • global_trigger_score 是否明显为正
  • window_trigger_score 是否明显为正
  • 是否在当前片段首次过阈值

每条完整文本最多输出综合分最高的 10 个候选片段。

最终输出与数量关系

JSON 包含 333 条 records,每条对应一条唯一完整文本,通过 source_rows 可回到 Excel 定位原文(JSON 中不保存完整原文)。

333 条归因记录
  → 每条长文本被切分成多个小片段
  → 25,037 个原始片段
  → 根据 BGE 分数变化筛选
  → 3,172 个候选触发片段(top_triggers)

333 是“长文本记录”的数量,3,172 是这些长文本中筛选出来的“候选小片段”总数,一条记录可以贡献多个候选片段。


3. 制定 3,172 个候选片段的处理计划

核心原则:

  1. 3,172 个片段只是 BGE 归因算法挑出的“高可能触发片段”,不能直接等同于真实违规内容。
  2. 片段中存在大量完全重复和高度相似内容,需要先去重和聚类。
  3. 需要使用 Minimax 判断片段本身是否安全,以及它是否适合作为误拦样本。
  4. 按要求取消人工抽检,改用自动化多轮一致性判断。
  5. 对争议结果进行第二轮、第三轮 Minimax 复判。

4. 展开候选片段并完成去重

展开

将 JSON 中每条记录的 top_triggers 展开为片段级数据,一行对应一个候选片段,保留以下属性:

  • 来源长文本和记录编号
  • 片段内容及位置
  • 单片段 BGE 分数
  • 前缀累计分数
  • 移除片段后的全局和局部变化
  • 综合归因分数
  • 上下文窗口
  • 长文本是否达到模型长度上限

完全去重与近似聚类

3,172 个原始候选片段
  ↓ 完全文本去重(按标准化文本)
354 个唯一片段
  ↓ 保守近似聚类(仅合并高度相似、包含关系明确或仅有格式差异的片段)
324 个代表簇

代表簇的结构:

一个代表簇
  ├── 一个代表片段
  ├── 一个或多个完全去重片段
  └── 对应一个或多个原始候选片段

324 个代表簇是对 3,172 个原始候选片段进行压缩后的核心分析单位。


5. Minimax 三轮判断与最终分级

第一轮判断

将 324 个代表簇逐一交给 Minimax,判断以下维度:

  • 片段单独看是否安全
  • 放回上下文后是否安全
  • 是否可能是 BGE 误拦
  • 风险类别
  • 最小触发内容
  • 判断置信度
  • 是否需要再次复核

第二、三轮自动复判

以下情况不直接采用第一轮结果,自动进入复判:

  • 模型主动标记 needs_recheck
  • 判断置信度偏低
  • 片段单独判断和结合上下文判断冲突
  • 是否属于误拦的结论存在明显不确定性

最终五级分级

等级 代表簇数 对应原始片段数 含义
A 204 2,225 高置信合规误拦核心集
B 27 713 可使用的误拦扩展集
C 5 7 自动判断仍不确定
D 32 57 真实不安全内容,可作为对照集
E 56 170 归因或数据质量不可靠
合计 324 3,172 —

核心结论:

324 个代表簇并不全部是最有价值的数据。真正最适合直接使用的是其中 204 个 A 级代表簇;27 个 B 级可以作为扩展数据;D、E 级不应混入合规误拦核心集。


6. A 级代表簇的使用方式与扩展

作为固定基准集

204 个 A 级代表簇的 representative_text 应作为固定误拦基准集,不建议被后续生成数据替代。用途包括:

  1. BGE 回归测试:每次修改模型、阈值或规则后重新运行。
  2. 误拦率统计:观察这些合规文本中还有多少被拦截。
  3. 风险类别分析:查看代码安全描述、敏感内容引用等类型是否更容易误拦。
  4. 阈值比较:比较不同阈值下误拦数量的变化。
  5. 规则优化:定位模型是否只因某些词语或表达形式产生高风险判断。

扩展生成

使用 Minimax 对每个父代表簇生成 5 种变体:

变体类型 说明
paraphrase 同义改写
contextualized 补充明确的合规上下文
format_shift 改变表达或排版格式
concise 更精简的表达
detailed 更详细的表达
204 个 A 级父代表簇 × 5 种变体 = 1,020 条候选扩展数据

7. 扩展数据清洗与独立验证

本地清洗

检查以下问题并剔除或合并:

  • 文本过短或过长
  • 文本为空
  • 与原文或其他扩展文本过度重复
  • 缺少必要信息
  • 标准化后形成重复
1,020 条生成候选
  ↓ 长度和确定性规则检查
984 条通过,36 条剔除
  ↓ 保守近似去重
976 条保留(8 条近似重复被合并)

独立验证

为避免“同一个模型生成后直接认为合格”,使用独立提示词让 Minimax 重新判断每条扩展文本:

  • 扩展文本是否安全
  • 是否保留父代表簇原意
  • 是否引入原文没有的新事实或危险细节
  • 作为误拦测试数据的价值(高 / 中 / 低)
  • 判断置信度

验证结果:

  • 待复核:976 条
  • 已完成:976 条
  • 覆盖父代表簇:204 个
  • 过程中出现过 3 条临时失败记录,均已重新处理成功

最终过滤与结果

严格通过条件:

verification_label == safe
preserves_parent_intent == true
introduces_unsupported_details == false
verification_confidence >= 0.80
数据类型 数量 父代表簇覆盖
全部验证通过扩展数据 968 204
高/中测试价值数据 854 200
低测试价值数据 114 —
全流程剔除数据 52 —

通过数据置信度:

  • 最低:0.80
  • 中位数:0.95
  • 最高:0.98

每个父代表簇最终保留的扩展数量:

  • 156 个父簇保留 5 条
  • 44 个父簇保留 4 条
  • 4 个父簇保留 3 条

8. 最终数据集 final_verified_expansions.csv

CSV 中一行代表一条已通过本地规则和 Minimax 独立复核的扩展数据。

关键字段

字段 用途
candidate_id 扩展数据唯一编号
parent_cluster_id 来源于哪个 A 级代表簇
parent_text 原始父代表簇文本
expanded_text 实际用于后续测试的新文本
variation_type 采用了哪种扩展方式
verification_label Minimax 独立复核的安全标签
preserves_parent_intent 是否保留父文本原意
introduces_unsupported_details 是否引入无依据的新内容
false_block_test_value 作为误拦测试数据的价值
verification_confidence 复核置信度
bge_retest_status 是否已经重新送入 BGE 测试

使用建议

  • 实际送测时,主要使用 expanded_text 字段。
  • 推荐优先使用 false_block_test_value = high 和 medium 的数据,共 854 条。